import _ from 'lodash';
import c from './connection';
import DB from '../util/db';
import cfg from '../../etc/dbms';

export function fields(opt) {
    return c.get(opt.conn).then(conn =>
        new DB(conn).run(
            db => db.fields({
                db: opt.db,
                table: opt.table
            })
        )
    );
}

export function query(opt) {
    return c.get(opt.conn).then(conn => {
        _.defaults(opt, {
            count: cfg.limit
        });
        const db = new DB(conn);
        if (_.has(opt, 'total')) {
            return db.run(db =>
                Promise.all([
                    db.query(opt),
                    db.count(opt)
                ]).then(results => ({
                    ...results[0],
                    total: results[1]
                })), true);
        } else {
            return db.run(db => db.query(opt));
        }
    });
}

export function count(opt) {
    return c.get(opt.conn).then(conn =>
        new DB(conn).run(db => db.count(opt))
    );
}
